<?php

/**
 * RequestModel
 *
 * @author yukio
 * @version $Id$
 */

require_once 'Zend/Db/Table/Abstract.php';

class RequestModel extends Zend_Db_Table_Abstract
{
    protected $_name = 'request_info';
    protected $_primary = 'req_id';
    protected $_sequence = true;
    
    /**
     * 支援物資の一覧を取得するためのselectオブジェクトを取得する。
     * このときデータベース上のテーブル request_info, support_info, mst_requester, mst_shelter を外部結合する。
     * 
     * @param AclModel::const $role
     * @param string $filterRequester フィルタしたい支援希望者のID
     * @param int $filterStatus フィルタしたいステータス
     * @return Zend_Db_Select
     */
    public function getSelect($filterRequester, $filterStatus, $order, $showDisable=false)
    {
        $supportModel = new SupportModel();
        $select = $supportModel->select();
        $select->setIntegrityCheck(false);
        $select->from('support_info', 'support_info.*');
        
        if ($filterStatus !== null && $filterStatus != -1) {
            if (!is_array($filterStatus)) {
                $select->where('last_status = ?', $filterStatus);
            } else {
                $filterStatuses = explode(',',$filterStatus);
                foreach ($filterStatuses as $filterStatus) {
                    $select->orWhere('last_status = ?', $filterStatus);
                }
            }
        }
        $select->joinLeft('request_info', 'request_info.req_id = support_info.req_id');

        $select->joinLeft('mst_requester', 'mst_requester.requester_id = request_info.requester_id',
                          array('mail_address'));

        $select->joinLeft('mst_shelter', 'mst_shelter.shelter_id = request_info.addressee_shelter_id',
                          array('shelter_id', 'prefecture', 'area', 'city', 'district', 'name',
                                'population', 'capacity', 'source', 'source_update_date',
                                'source_update_time', 'lat_lng', 'notes', 'status', 'sortkey'));

        if ($filterRequester !== null) {
            $select->where('request_info.requester_id = ?', $filterRequester);
        }
        
        if ($showDisable === false) {
            $select->where("request_info.enable = '?'", 1);
        }

        $select->order($order);
        
        return $select;
    }
    
    /**
     * ステータスごとの申請個数を求める関数
     * フィルタしたい申請希望者がいる場合にはフィルタし、いない場合には全申請に対する個数を取得する。
     * 
     * @param string $filterRequester フィルタしたい申請希望者のID
     * @return array
     */
    public function getCountPerStatus($filterRequester, $showDisable=false)
    {
    	$count = array();
    	
    	// 請求全体のカウントを求める
    	$requestModel = new RequestModel();
    	$select = $requestModel->select();
        $select->from('request_info','COUNT(req_id)');
        if ($filterRequester != null) {
        	$select->where('requester_id = ?', $filterRequester);
        }
        if ($showDisable === false) {
            $select->where("request_info.enable = '?'", 1);
        }
        $val = $requestModel->fetchRow($select);
        $count['total'] = $val['count'];
        
        // ステータスごとのカウントを求める
        $supportModel = new SupportModel();
        $select = $supportModel->select();
        $select->setIntegrityCheck(false);
        $select->from('support_info',array('count' => 'COUNT(support_info.req_id)', 'last_status'=>'last_status'));
        $select->joinLeft('request_info', 'request_info.req_id = support_info.req_id', array(''));
        if ($showDisable === false) {
            $select->where("request_info.enable = '?'", 1);
        }
        if ($filterRequester != null) {
        	$select->where('requester_id = ?', $filterRequester);
        }
        $select->group('last_status');
        $cols = $supportModel->fetchAll($select);
        $val = $cols->toArray();
        
        foreach ($val as $status) {
        	$count[$status['last_status']] = $status['count'];
        }
        return $count;
    }    
    
}